"""
将Unicode文本标准化

问题：
    你正在处理Unicode字符串，需要确保所有字符串在底层有相同的表示。
解决方案：
    在Unicode中，某些字符能够用多个合法的编码表示。
    1.在需要比较字符串的程序中使用字符的多种表示会产生问题。
      为了修正这个问题，你可以使用unicodedata模块先将文本标准化。
    2.Python同样支持扩展的标准化形式NFKC和NFKD，它们在处理某些字符的时候增加了额外的兼容特性。
"""

import unicodedata


def use_unicodedata():
    s1 = "Spicy Jalape\u00f1o"
    s2 = "Spicy Jalapen\u0303o"
    print(s1 == s2)
    print(len(s1), len(s2))
    # 输出结果：
    """
    False
    14 15
    """

    t1 = unicodedata.normalize("NFC", s1)
    t2 = unicodedata.normalize("NFC", s2)
    print(t1 == t2)
    print(len(t1), len(t2))
    # 输出结果：
    """
    True
    14 14
    """

    s = '\ufb01'
    print(unicodedata.normalize("NFD", s))
    print(unicodedata.normalize("NFKD", s))
    print(unicodedata.normalize("NFKC", s))
    # 输出结果：
    """
    ﬁ
    fi
    fi
    """


if __name__ == '__main__':
    use_unicodedata()
